WCF Service Behaviors এবং Custom Behaviors Creation

Microsoft Technologies - উইন্ডোজ কমিউনিকেশন সিস্টেম (WCF)
190

WCF (Windows Communication Foundation) সার্ভিসের আচরণ (Behaviors) কনফিগারেশন, কার্যক্ষমতা এবং অন্যান্য সেটিংস নিয়ন্ত্রণ করার জন্য ব্যবহৃত হয়। Service Behaviors এবং Custom Behaviors WCF সার্ভিসের বিভিন্ন দিক, যেমন সিকিউরিটি, কনকারেন্সি ম্যানেজমেন্ট, এবং থ্রেড সিঙ্ক্রোনাইজেশন কাস্টমাইজ করতে সহায়ক।

WCF সার্ভিসে Service Behaviors এবং Custom Behaviors নির্ধারণ করা হয় ServiceBehavior এবং BehaviorExtensionElement অ্যাট্রিবিউটের মাধ্যমে। সার্ভিসের আচরণ কনফিগার করা WCF সার্ভিসের কার্যকারিতা এবং পারফরম্যান্স উন্নত করতে গুরুত্বপূর্ণ ভূমিকা রাখে।


Service Behaviors

Service Behaviors হল পূর্বনির্ধারিত আচরণ, যা WCF সার্ভিসের কাজের ধরন নির্ধারণ করে। এটি সার্ভিসের কনফিগারেশনের মাধ্যমে নির্ধারণ করা হয় এবং ServiceBehavior অ্যাট্রিবিউট ব্যবহার করে সেট করা হয়।

Common Service Behaviors:

  1. InstanceContextMode: এটি একটি সার্ভিসের ইনস্ট্যান্স ম্যানেজমেন্ট নিয়ন্ত্রণ করে (যেমন PerCall, PerSession, Single ইত্যাদি)।
  2. ConcurrencyMode: এটি সার্ভিসের কনকারেন্সি নিয়ন্ত্রণ করে (যেমন Single, Multiple, Reentrant)।
  3. TransactionIsolationLevel: এটি সার্ভিসের ট্রানজেকশন আইসোলেশন নিয়ন্ত্রণ করে।
  4. AutomaticSessionShutdown: এটি যখন সেশন শেষ হয় তখন স্বয়ংক্রিয়ভাবে সার্ভিসটি বন্ধ করে।

Service Behavior উদাহরণ:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class MyService : IMyService
{
    public string GetMessage(string name)
    {
        return $"Hello, {name}!";
    }
}
  • InstanceContextMode.PerSession: সার্ভিস ইনস্ট্যান্সটি একটি সেশনের জন্য তৈরি হবে।
  • ConcurrencyMode.Multiple: একাধিক থ্রেড একসাথে সার্ভিসের অপারেশন এক্সিকিউট করতে পারবে।

Service Behavior কনফিগারেশন (web.config):

<system.serviceModel>
  <services>
    <service name="MyNamespace.MyService">
      <endpoint address="" binding="basicHttpBinding" contract="MyNamespace.IMyService" />
      <host>
        <baseAddresses>
          <add baseAddress="http://localhost:8080/MyService" />
        </baseAddresses>
      </host>
      <behavior>
        <serviceBehaviors>
          <behavior name="myBehavior">
            <serviceMetadata httpGetEnabled="true"/>
            <serviceDebug includeExceptionDetailInFaults="false"/>
          </behavior>
        </serviceBehaviors>
      </behavior>
    </service>
  </services>
</system.serviceModel>
  • এখানে serviceMetadata সার্ভিসের মেটাডেটা প্রকাশ করার জন্য এবং serviceDebug ডিবাগিং কনফিগারেশন নিয়ন্ত্রণ করার জন্য ব্যবহার করা হয়েছে।

Custom Behaviors Creation

Custom Behaviors হল কাস্টম কোড যা WCF সার্ভিসের আচরণ কাস্টমাইজ করতে ব্যবহৃত হয়। যখন পূর্বনির্ধারিত সার্ভিস আচরণ যথেষ্ট না হয়, তখন আপনি Custom Behaviors তৈরি করে সার্ভিসের কার্যকলাপ কাস্টমাইজ করতে পারেন। কাস্টম আচরণগুলি সাধারণত BehaviorExtensionElement এবং IServiceBehavior ইন্টারফেস ব্যবহার করে তৈরি করা হয়।

Custom Behavior Class Creation

  1. প্রথমে একটি কাস্টম বিহেভিয়ার ক্লাস তৈরি করুন যা IServiceBehavior ইন্টারফেস ইমপ্লিমেন্ট করবে।
  2. পরে সেই কাস্টম বিহেভিয়ার সার্ভিসে প্রয়োগ করুন।
Step 1: Custom Behavior Class
public class MyCustomBehavior : IServiceBehavior
{
    public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, BindingParameterCollection bindingParameters)
    {
        // Add custom binding parameters if necessary
    }

    public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
        // Add custom dispatch behavior logic here
        foreach (ChannelDispatcher dispatcher in serviceHostBase.ChannelDispatchers)
        {
            foreach (EndpointDispatcher endpointDispatcher in dispatcher.Endpoints)
            {
                // For example, adding a message inspector
                endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new MyMessageInspector());
            }
        }
    }

    public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
        // Perform validation logic if necessary
    }
}
Step 2: Custom Behavior Extension
public class MyCustomBehaviorExtensionElement : BehaviorExtensionElement
{
    public override Type BehaviorType
    {
        get { return typeof(MyCustomBehavior); }
    }

    protected override object CreateBehavior()
    {
        return new MyCustomBehavior();
    }
}
Step 3: Register Custom Behavior in Configuration
<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="myBehavior">
        <myCustomBehaviorExtension />
      </behavior>
    </serviceBehaviors>
  </behaviors>

  <services>
    <service name="MyNamespace.MyService">
      <endpoint address="" binding="basicHttpBinding" contract="MyNamespace.IMyService" />
      <host>
        <baseAddresses>
          <add baseAddress="http://localhost:8080/MyService" />
        </baseAddresses>
      </host>
    </service>
  </services>
</system.serviceModel>
  • এখানে myCustomBehaviorExtension আমাদের কাস্টম বিহেভিয়ারটি সার্ভিস কনফিগারেশন ফাইলে যুক্ত করা হয়েছে।

Custom Behaviors and Extensions

Custom behaviors আপনাকে WCF সার্ভিসের মধ্যে আরও কাস্টম প্রক্রিয়া অন্তর্ভুক্ত করার সুযোগ দেয়। উদাহরণস্বরূপ, আপনি:

  • Message Inspectors: ইনপুট এবং আউটপুট মেসেজগুলোকে পর্যবেক্ষণ করতে পারেন।
  • Parameter Inspectors: সেবা কলের প্যারামিটার পরীক্ষা করতে পারেন।
  • Custom Authorization and Authentication: ক্লায়েন্টের আবেদন পরীক্ষা বা সুরক্ষিত ডেটা অ্যাক্সেস কাস্টমাইজ করতে পারেন।

সারাংশ

  • Service Behaviors হল WCF সার্ভিসের পূর্বনির্ধারিত কনফিগারেশন যা সার্ভিসের কার্যকলাপ নিয়ন্ত্রণ করে, যেমন InstanceContextMode এবং ConcurrencyMode
  • Custom Behaviors হল WCF সার্ভিসের জন্য কাস্টম আচরণ যা IServiceBehavior এবং BehaviorExtensionElement ইন্টারফেস ব্যবহার করে তৈরি করা হয়।
  • Custom Behaviors আপনাকে WCF সার্ভিসের কার্যকলাপ এবং পরিবেশ কাস্টমাইজ করার সুযোগ দেয়, যেমন Message Inspectors বা Authorization প্রক্রিয়া।

WCF সার্ভিসে সঠিক Behaviors ব্যবহার করলে আপনার সার্ভিসের কর্মক্ষমতা, নিরাপত্তা এবং স্কেলেবিলিটি অনেক বেড়ে যাবে।

Content added By

Service Behaviors কী এবং কিভাবে কাজ করে

211

Service Behaviors WCF (Windows Communication Foundation) এর একটি গুরুত্বপূর্ণ ধারণা যা সার্ভিসের আচরণ কাস্টমাইজ করতে ব্যবহৃত হয়। Service Behavior মূলত সেই সব আচরণ বা বৈশিষ্ট্য নির্ধারণ করে যা WCF সার্ভিসের কার্যক্রম এবং উপস্থাপনায় প্রভাব ফেলে। এটি বিভিন্ন কনফিগারেশন এবং আচরণ নিয়ন্ত্রণ করতে সাহায্য করে যেমন কনকারেন্সি ম্যানেজমেন্ট, ইনস্ট্যান্স ম্যানেজমেন্ট, সিকিউরিটি, টাইমআউট সেটিংস, লগিং, এবং আরও অনেক কিছু।

WCF সার্ভিসের ServiceBehavior অ্যাট্রিবিউটের মাধ্যমে এই আচরণগুলি কনফিগার করা হয়, যা সার্ভিসের কার্যকারিতা নিয়ন্ত্রণ করার জন্য একটি গুরুত্বপূর্ণ ভূমিকা পালন করে।


Service Behaviors এর ধরণ

WCF তে কয়েকটি প্রধান Service Behavior রয়েছে যা সার্ভিসের কনফিগারেশন এবং পারফরম্যান্সে প্রভাব ফেলে:

  1. Instance Context Mode
  2. Concurrency Mode
  3. Transaction Mode
  4. Validate MustUnderstand
  5. IncludeExceptionDetailInFaults

1. Instance Context Mode

Instance Context Mode সার্ভিসের ইনস্ট্যান্স ম্যানেজমেন্ট নিয়ন্ত্রণ করে। এটি নির্ধারণ করে যে WCF সার্ভিসটি প্রতি ক্লায়েন্ট কল, সেশন, বা সার্ভিসের পুরো জীবনকালে একক ইনস্ট্যান্স ব্যবহার করবে কিনা।

Instance Context Mode এর তিনটি প্রধান অপশন:

  • Per Call: প্রতি কলের জন্য একটি নতুন সার্ভিস ইনস্ট্যান্স তৈরি করা হয়।
  • Per Session: প্রতি সেশনের জন্য একটি সার্ভিস ইনস্ট্যান্স তৈরি করা হয়।
  • Single: সার্ভিসের জন্য একটি একক ইনস্ট্যান্স পুরো অ্যাপ্লিকেশনের জীবনকাল ধরে ব্যবহার করা হয়।

উদাহরণ:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class MyService : IMyService
{
    public string GetMessage(string name)
    {
        return $"Hello, {name}!";
    }
}

এখানে, InstanceContextMode.PerCall সার্ভিসের জন্য প্রতি কলের জন্য একটি নতুন ইনস্ট্যান্স তৈরি করবে।


2. Concurrency Mode

Concurrency Mode সার্ভিসের থ্রেড কনকারেন্সি নিয়ন্ত্রণ করে। এটি নির্ধারণ করে যে একাধিক থ্রেড একই সার্ভিস ইনস্ট্যান্সের উপর একযোগে কাজ করতে পারবে কিনা।

Concurrency Mode এর তিনটি প্রধান অপশন:

  • Single: এক সময়ে এক ক্লায়েন্ট থ্রেড কাজ করবে। এটি থ্রেড নিরাপদ কিন্তু কার্যক্ষমতা কম হতে পারে।
  • Multiple: এক সময়ে একাধিক ক্লায়েন্ট থ্রেড কাজ করতে পারবে। তবে, এটি থ্রেড সিঙ্ক্রোনাইজেশন প্রয়োজন।
  • Reentrant: এটি Multiple এর মতো, তবে এক থ্রেড অন্য থ্রেডের কাজ করতে না পারলে তা অপেক্ষা করবে।

উদাহরণ:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
public class MyService : IMyService
{
    public string GetMessage(string name)
    {
        return $"Hello, {name}!";
    }
}

এখানে, ConcurrencyMode.Multiple একাধিক ক্লায়েন্ট থ্রেড একসাথে কাজ করার অনুমতি দেবে।


3. Transaction Mode

Transaction Mode একটি গুরুত্বপূর্ণ behavior যা সার্ভিসের মাধ্যমে পরিচালিত ট্রানজেকশন পরিচালনা করতে ব্যবহৃত হয়। যখন WCF সার্ভিসটি একটি ডেটাবেস অপারেশন করে, তখন এটি একটি Transaction ব্যবহার করে ডেটা নিরাপত্তা নিশ্চিত করে।

Transaction Mode এর দুটি অপশন:

  • NotAllowed: সার্ভিসে ট্রানজেকশন ব্যবহারের অনুমতি দেয় না।
  • Allowed: সার্ভিসে ট্রানজেকশন ব্যবহারের অনুমতি দেয়।

উদাহরণ:

[ServiceBehavior(TransactionIsolationLevel = System.Transactions.IsolationLevel.ReadCommitted)]
public class MyService : IMyService
{
    public string GetMessage(string name)
    {
        // Perform a transaction-related operation
        return $"Hello, {name}!";
    }
}

এখানে, TransactionIsolationLevel.ReadCommitted ট্রানজেকশনের মাধ্যমে ডেটা অ্যাক্সেসের জন্য ReadCommitted বিচ্ছিন্নতার স্তর নির্ধারণ করছে।


4. Validate MustUnderstand

Validate MustUnderstand behavior WCF এ MustUnderstand SOAP হেডার ফিচার ব্যবহার করে। এটি নিশ্চিত করে যে ক্লায়েন্ট সার্ভিসের জন্য পাঠানো MustUnderstand হেডারকে সঠিকভাবে হ্যান্ডল করতে পারবে।

উদাহরণ:

[ServiceBehavior(ValidateMustUnderstand = true)]
public class MyService : IMyService
{
    public string GetMessage(string name)
    {
        return $"Hello, {name}!";
    }
}

এখানে, ValidateMustUnderstand = true WCF সার্ভিসে MustUnderstand SOAP হেডারের প্রযোজ্যতা নিশ্চিত করবে।


5. IncludeExceptionDetailInFaults

IncludeExceptionDetailInFaults behavior সার্ভিসের faults-এ ত্রুটির বিস্তারিত তথ্য অন্তর্ভুক্ত করার জন্য ব্যবহৃত হয়। এটি ডেভেলপারদের জন্য বিশেষভাবে উপকারী কারণ এটি WCF সার্ভিসে ত্রুটির কারণ জানতে সাহায্য করে।

উদাহরণ:

[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class MyService : IMyService
{
    public string GetMessage(string name)
    {
        throw new Exception("An error occurred.");
    }
}

এখানে, IncludeExceptionDetailInFaults = true সার্ভিসের ত্রুটির বিস্তারিত তথ্য ক্লায়েন্টের কাছে প্রদান করবে।


সারাংশ

Service Behaviors WCF সার্ভিসের পারফরম্যান্স, নিরাপত্তা এবং কার্যকারিতা নিয়ন্ত্রণ করতে ব্যবহৃত হয়। এটি সার্ভিসের ইনস্ট্যান্স ম্যানেজমেন্ট, কনকারেন্সি নিয়ন্ত্রণ, ট্রানজেকশন ব্যবস্থাপনা, SOAP হেডার যাচাই এবং ত্রুটি বিস্তারিত প্রদান সম্পর্কিত বিভিন্ন আচরণ কনফিগার করে।

প্রধান Service Behaviors গুলি হলো:

  • Instance Context Mode: ইনস্ট্যান্সের জীবনকাল নিয়ন্ত্রণ।
  • Concurrency Mode: থ্রেড কনকারেন্সি নিয়ন্ত্রণ।
  • Transaction Mode: ট্রানজেকশনের সাথে সম্পর্কিত কনফিগারেশন।
  • Validate MustUnderstand: SOAP হেডার যাচাই।
  • IncludeExceptionDetailInFaults: ত্রুটি বিস্তারিত প্রদান।

এই behaviors গুলি সার্ভিসের কার্যকারিতা এবং নির্ভরযোগ্যতা উন্নত করার জন্য ব্যবহৃত হয়।

Content added By

Custom Behaviors তৈরি এবং Configure করা

181

WCF (Windows Communication Foundation) এ Behaviors এমন কাস্টম উপাদান যা সার্ভিস বা ক্লায়েন্টের কার্যকলাপ কাস্টমাইজ করার জন্য ব্যবহৃত হয়। WCF এ কিছু পূর্বনির্ধারিত behaviors যেমন ServiceBehavior এবং OperationBehavior পাওয়া যায়, কিন্তু কখনো কখনো ডেভেলপারদের বিশেষ কার্যকলাপের প্রয়োজন হয়, যেখানে কাস্টম behaviors তৈরি করতে হয়। Custom Behaviors দ্বারা আপনি সার্ভিসের কার্যকলাপকে আরও নিয়ন্ত্রণ এবং কাস্টমাইজ করতে পারেন, যেমন logging, caching, validation, message interception, ইত্যাদি।

এই গাইডে, আমরা Custom Behaviors তৈরি এবং কনফিগার করার প্রক্রিয়া দেখবো।


ধাপ ১: Custom Behavior তৈরি করা

WCF তে কাস্টম behaviors তৈরি করতে হলে, আপনাকে কিছু ইন্টারফেস ইমপ্লিমেন্ট করতে হয়। সাধারণত, আপনি IServiceBehavior এবং IEndpointBehavior ইন্টারফেস ব্যবহার করবেন, যা সার্ভিস বা এন্ডপয়েন্টের আচরণ কাস্টমাইজ করার জন্য ব্যবহৃত হয়।

উদাহরণ: Custom Service Behavior

  1. IServiceBehavior ইন্টারফেস ইমপ্লিমেন্ট করে একটি কাস্টম সার্ভিস বিহেভিয়ার তৈরি করুন। এটি সার্ভিসের initialization এবং কনফিগারেশন কাস্টমাইজ করবে।
using System.ServiceModel;
using System.ServiceModel.Description;

public class MyCustomServiceBehavior : IServiceBehavior
{
    public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<BindingParameterCollection> bindingParameters)
    {
        // Add custom binding parameters (if needed)
    }

    public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
        foreach (var endpoint in serviceDescription.Endpoints)
        {
            // Modify endpoint dispatch behavior if needed
        }
    }

    public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
        // Perform validation checks on the service
    }
}

এখানে AddBindingParameters, ApplyDispatchBehavior, এবং Validate মেথডগুলো সার্ভিসের কাস্টম বিহেভিয়ার পরিচালনা করবে।

উদাহরণ: Custom Endpoint Behavior

  1. IEndpointBehavior ইন্টারফেস ইমপ্লিমেন্ট করে একটি কাস্টম এন্ডপয়েন্ট বিহেভিয়ার তৈরি করুন।
using System.ServiceModel;
using System.ServiceModel.Description;

public class MyCustomEndpointBehavior : IEndpointBehavior
{
    public void AddBindingParameters(ServiceEndpoint serviceEndpoint, BindingParameterCollection bindingParameters)
    {
        // Add custom parameters to the binding
    }

    public void ApplyClientBehavior(ServiceEndpoint serviceEndpoint, ClientRuntime clientRuntime)
    {
        // Modify client behavior if needed
    }

    public void ApplyDispatchBehavior(ServiceEndpoint serviceEndpoint, EndpointDispatcher endpointDispatcher)
    {
        // Modify dispatch behavior if needed
    }

    public void Validate(ServiceEndpoint serviceEndpoint)
    {
        // Validate the endpoint
    }
}

এই IEndpointBehavior কাস্টম বিহেভিয়ার সার্ভিসের একে অপরের সাথে যোগাযোগে কাস্টম কনফিগারেশন প্রয়োগ করতে পারে।


ধাপ ২: Custom Behavior রেজিস্টার করা

WCF সার্ভিসের সাথে Custom Behaviors যোগ করতে, আপনাকে web.config বা app.config ফাইলে এগুলোর কনফিগারেশন করতে হবে।

Service Behavior কনফিগারেশন (web.config):

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="myCustomBehavior">
        <serviceMetadata httpGetEnabled="true" />
        <myNamespace:MyCustomServiceBehavior />
      </behavior>
    </serviceBehaviors>
  </behaviors>

  <services>
    <service name="MyNamespace.MyService" behaviorConfiguration="myCustomBehavior">
      <endpoint address="" binding="basicHttpBinding" contract="MyNamespace.IMyService" />
    </service>
  </services>
</system.serviceModel>

এখানে myNamespace:MyCustomServiceBehavior দ্বারা কাস্টম সার্ভিস বিহেভিয়ার রেজিস্টার করা হয়েছে। এখানে behaviorConfiguration দ্বারা সার্ভিসের সাথে কাস্টম বিহেভিয়ার যুক্ত করা হয়েছে।

Endpoint Behavior কনফিগারেশন (web.config):

<system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="myCustomEndpointBehavior">
        <myNamespace:MyCustomEndpointBehavior />
      </behavior>
    </endpointBehaviors>
  </behaviors>

  <services>
    <service name="MyNamespace.MyService">
      <endpoint address="" binding="basicHttpBinding" contract="MyNamespace.IMyService"
                behaviorConfiguration="myCustomEndpointBehavior" />
    </service>
  </services>
</system.serviceModel>

এখানে myNamespace:MyCustomEndpointBehavior দ্বারা কাস্টম এন্ডপয়েন্ট বিহেভিয়ার রেজিস্টার করা হয়েছে এবং behaviorConfiguration দ্বারা এটি সার্ভিসের এন্ডপয়েন্টে যুক্ত করা হয়েছে।


ধাপ ৩: Custom Behavior Apply করা

কাস্টম বিহেভিয়ার সার্ভিস এবং এন্ডপয়েন্টে অ্যাপ্লাই করার জন্য, সার্ভিস হোস্টে সেগুলোর রেজিস্ট্রেশন করতে হবে। আপনি সার্ভিসের কনস্ট্রাক্টর বা ইনেিশিয়ালাইজেশনে ServiceHost অবজেক্টের মাধ্যমে কাস্টম বিহেভিয়ার যোগ করতে পারেন।

public class MyServiceHost : ServiceHost
{
    public MyServiceHost(Type serviceType, Uri[] baseAddresses)
        : base(serviceType, baseAddresses)
    { }

    protected override void OnOpening()
    {
        base.OnOpening();
        // Add custom service behavior to the host
        this.Description.Behaviors.Add(new MyCustomServiceBehavior());
    }
}

এখানে OnOpening() মেথডে আমরা MyCustomServiceBehavior সার্ভিস হোস্টে অ্যাড করেছি।


ধাপ ৪: Custom Behavior ব্যবহার করে Logging

ধরা যাক, আপনি একটি কাস্টম বিহেভিয়ার তৈরি করতে চান যা সার্ভিসের প্রতিটি মেসেজের লগ রাখবে। এটি করার জন্য, আপনি IMessageInspector ব্যবহার করতে পারেন, যা সার্ভিসের মেসেজ ইনপুট এবং আউটপুট পরীক্ষা করতে সাহায্য করে।

Logging Behavior উদাহরণ:

using System.ServiceModel.Dispatcher;
using System.ServiceModel.Channels;

public class MyLoggingBehavior : IDispatchMessageInspector
{
    public void AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
    {
        // Log the request message
        Console.WriteLine("Received message: " + request);
    }

    public void BeforeSendReply(ref Message reply, object correlationState)
    {
        // Log the response message
        Console.WriteLine("Sent reply: " + reply);
    }
}

এখন, এই কাস্টম IMessageInspector কে Custom Behavior হিসেবে ব্যবহার করতে পারেন। এর মাধ্যমে সার্ভিসের প্রতিটি ইনপুট এবং আউটপুট মেসেজের লগ রাখা সম্ভব।


সারাংশ

  • Custom Behaviors WCF সার্ভিসের কার্যকলাপ কাস্টমাইজ করতে ব্যবহৃত হয়। এর মধ্যে IServiceBehavior এবং IEndpointBehavior ইন্টারফেস ব্যবহার করা হয়।
  • Service Behavior সার্ভিসের কার্যকলাপ কাস্টমাইজ করে, এবং Endpoint Behavior এন্ডপয়েন্টের সাথে সম্পর্কিত কার্যকলাপ কাস্টমাইজ করে।
  • WCF এ কাস্টম বিহেভিয়ার সঠিকভাবে কনফিগার এবং রেজিস্টার করার মাধ্যমে, আপনি সার্ভিসের কর্মক্ষমতা, নিরাপত্তা, এবং অন্যান্য ফিচার উন্নত করতে পারেন।
Content added By

Metadata Exchange (MEX) এবং Discovery Behaviors

217

Metadata Exchange (MEX) এবং Discovery Behaviors WCF (Windows Communication Foundation)-এ দুটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা সার্ভিস এবং ক্লায়েন্টের মধ্যে মেটাডেটা আদান-প্রদান এবং সার্ভিসের আবিষ্কার প্রক্রিয়া সহজতর করে। এই বৈশিষ্ট্যগুলি WCF সার্ভিসের সাথে যোগাযোগের নিরাপত্তা, কার্যকারিতা এবং স্কেলেবিলিটি বাড়াতে সাহায্য করে।


১. Metadata Exchange (MEX)

Metadata Exchange (MEX) হলো WCF এর একটি ফিচার, যা সার্ভিসের মেটাডেটা (যেমন, সার্ভিস কনট্র্যাক্ট, অপারেশন কনট্র্যাক্ট) ক্লায়েন্টকে সরবরাহ করে। MEX-এর মাধ্যমে, ক্লায়েন্ট সার্ভিসের সাথে যোগাযোগ শুরু করার আগে সার্ভিসের কনফিগারেশন ও মেটাডেটা সম্পর্কে জানতে পারে।

MEX এর সুবিধা:

  • Service Description: সার্ভিসের কনট্র্যাক্টের পুরো বিবরণ (ইন্টারফেস এবং অপারেশন) প্রদান করে।
  • Client Generation: MEX ক্লায়েন্ট অ্যাপ্লিকেশনগুলিকে স্বয়ংক্রিয়ভাবে সার্ভিস রেফারেন্স তৈরি করতে সাহায্য করে, যা সার্ভিসের কনট্র্যাক্ট অনুযায়ী ক্লায়েন্ট স্টাব গুলি তৈরি করতে সক্ষম হয়।
  • Dynamic Communication: এটি ডাইনামিক্যালি সার্ভিসের মেটাডেটা অ্যাক্সেস করতে পারে এবং কোনো কনফিগারেশন ছাড়াই সার্ভিসের তথ্য ব্যবহার করতে সক্ষম।

MEX Endpoint কনফিগারেশন:

WCF সার্ভিসে MEX সমর্থন যোগ করতে, আপনাকে একটি MEX Endpoint কনফিগার করতে হবে, যা সার্ভিসের মেটাডেটা ক্লায়েন্টকে সরবরাহ করবে।

App.config বা Web.config-এ MEX Endpoint কনফিগার করা:

<system.serviceModel>
  <services>
    <service name="MyService">
      <endpoint address="http://localhost:8080/MyService"
                binding="basicHttpBinding"
                contract="IMyService" />
      <endpoint address="mex" 
                binding="mexHttpBinding"
                contract="IMetadataExchange" />
    </service>
  </services>
</system.serviceModel>

এখানে:

  • MEX Endpoint: mexHttpBinding ব্যবহার করে সার্ভিসের মেটাডেটা পাওয়া যাবে।
  • Address: mex নামের এন্ডপয়েন্টটি ব্যবহার করা হয়েছে, যা মেটাডেটা এক্সচেঞ্জের জন্য ব্যবহৃত হয়।

সার্ভিস থেকে MEX পেতে:

একটি ক্লায়েন্ট অ্যাপ্লিকেশন থেকে সার্ভিসের মেটাডেটা পেতে, আপনাকে svcutil.exe অথবা Visual Studio এর মাধ্যমে Add Service Reference অপশন ব্যবহার করতে হবে।


২. Discovery Behaviors

Discovery Behaviors WCF এ একটি সার্ভিস বা ক্লায়েন্ট স্বয়ংক্রিয়ভাবে একে অপরকে আবিষ্কার করার প্রক্রিয়া। এর মাধ্যমে ক্লায়েন্ট সার্ভিসের অবস্থান এবং কনফিগারেশন সম্পর্কিত তথ্য জানতে পারে, এবং সার্ভিসটি ম্যানুয়ালি কনফিগার করার প্রয়োজন ছাড়াই ক্লায়েন্টের জন্য উপলব্ধ হয়।

WCF এ Service Discovery হল একটি সার্ভিস বা ক্লায়েন্টের জন্য একটি নেটওয়ার্ক ভিত্তিক সিস্টেম, যা সার্ভিসের অবস্থান খুঁজে বের করে এবং এটি ক্লায়েন্টকে জানান দেয়। এই বৈশিষ্ট্যটি WCF সার্ভিসে WS-Discovery প্রোটোকল ব্যবহার করে।

Discovery Behaviors কনফিগারেশন:

Service Discovery এবং Client Discovery কনফিগার করার জন্য আপনাকে সার্ভিস এবং ক্লায়েন্ট উভয়ের জন্য DiscoveryBehavior কনফিগার করতে হবে।

সার্ভিসের Discovery Behavior কনফিগারেশন:

App.config ফাইলে Discovery Behavior কনফিগার করার জন্য:

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="serviceBehavior">
        <serviceDiscovery enabled="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <services>
    <service name="MyService" behaviorConfiguration="serviceBehavior">
      <endpoint address="http://localhost:8080/MyService"
                binding="basicHttpBinding"
                contract="IMyService" />
    </service>
  </services>
</system.serviceModel>

এখানে:

  • serviceDiscovery enabled="true": সার্ভিসের Discovery Behavior সক্ষম করা হয়েছে, যাতে সার্ভিসের অবস্থান স্বয়ংক্রিয়ভাবে আবিষ্কৃত হয়।
ক্লায়েন্টের Discovery Behavior কনফিগারেশন:

App.config ফাইলে ক্লায়েন্টের জন্য Discovery Behavior কনফিগার করতে:

<system.serviceModel>
  <behaviors>
    <clientBehaviors>
      <behavior name="clientBehavior">
        <clientCredentials>
          <serviceCertificate>
            <authentication certificateValidationMode="PeerOrChainTrust" />
          </serviceCertificate>
        </clientCredentials>
      </behavior>
    </clientBehaviors>
  </behaviors>
</system.serviceModel>

এখানে:

  • clientBehaviors: ক্লায়েন্টের জন্য নির্দিষ্ট কনফিগারেশন সমর্থন করে, যার মাধ্যমে ক্লায়েন্ট সার্ভিসটি আবিষ্কার করতে পারে।
  • serviceCertificate: ক্লায়েন্ট সার্ভিসের সার্টিফিকেট যাচাই করতে ব্যবহৃত হয় (যদি সার্ভিস নিরাপদ হয়)।

৩. সার্ভিস এবং ক্লায়েন্টের Discovery এর উদাহরণ

ধরা যাক, একটি WCF সার্ভিস সার্ভার মেশিনে চলমান এবং ক্লায়েন্টটি সার্ভিসের অবস্থান জানে না। Discovery Behaviors ব্যবহার করে, ক্লায়েন্টটি সার্ভিসটি খুঁজে পাবে এবং এটি ব্যবহার করবে।

সার্ভিসের Discovery কনফিগারেশন:

<system.serviceModel>
  <services>
    <service name="MyService">
      <endpoint address="http://localhost:8080/MyService"
                binding="basicHttpBinding"
                contract="IMyService" />
      <endpoint address="mex"
                binding="mexHttpBinding"
                contract="IMetadataExchange" />
    </service>
  </services>
</system.serviceModel>

ক্লায়েন্টের Discovery কনফিগারেশন:

<system.serviceModel>
  <client>
    <endpoint address="http://localhost:8080/MyService"
              binding="basicHttpBinding"
              contract="IMyService" />
  </client>
</system.serviceModel>

এখন, ক্লায়েন্ট সার্ভিসের mex এন্ডপয়েন্ট ব্যবহার করে সার্ভিসের মেটাডেটা আবিষ্কার করবে এবং এর সাথে সংযোগ করবে।


সারাংশ

  • Metadata Exchange (MEX) হলো WCF-এর একটি বৈশিষ্ট্য যা সার্ভিসের মেটাডেটা ক্লায়েন্টকে সরবরাহ করে। এটি সার্ভিসের কনট্র্যাক্টের পূর্ণ বিবরণ প্রদান করে, যা ক্লায়েন্টের জন্য স্বয়ংক্রিয়ভাবে সার্ভিস রেফারেন্স তৈরি করতে সাহায্য করে।
  • Discovery Behaviors হল সার্ভিস এবং ক্লায়েন্টের মধ্যে স্বয়ংক্রিয় যোগাযোগ ব্যবস্থা, যা সার্ভিস এবং ক্লায়েন্টের অবস্থান খুঁজে বের করতে সহায়ক। এটি সার্ভিসের অবস্থান আবিষ্কার এবং ডাইনামিক সার্ভিস কনফিগারেশন সমর্থন করে।

MEX এবং Discovery Behaviors WCF সার্ভিসের কার্যকারিতা ও ব্যবহার সহজ করে তোলে, বিশেষ করে যদি সার্ভিস এবং ক্লায়েন্টের মধ্যে নেটওয়ার্ক কনফিগারেশন পরিবর্তনযোগ্য বা ডাইনামিক হয়।

Content added By

Error Handling এবং Logging Behaviors

204

WCF (Windows Communication Foundation) একটি শক্তিশালী প্রযুক্তি যা বিভিন্ন ধরনের অ্যাপ্লিকেশন এবং সিস্টেমের মধ্যে যোগাযোগের জন্য ব্যবহৃত হয়। তবে, বাস্তব অ্যাপ্লিকেশনগুলিতে সার্ভিস ব্যবহারের সময় বিভিন্ন ধরনের Error Handling এবং Logging প্রয়োজন। WCF এর Error Handling এবং Logging Behaviors এর মাধ্যমে, আমরা আমাদের অ্যাপ্লিকেশনের সমস্যা সনাক্তকরণ, সমাধান এবং ডিবাগিং সহজ করতে পারি।

এই টিউটোরিয়ালে আমরা দেখব কিভাবে Error Handling এবং Logging Behaviors ব্যবহার করা যায় WCF সার্ভিসে।


১. Error Handling in WCF

WCF Error Handling এর মূল উদ্দেশ্য হলো সার্ভিসে ঘটিত ত্রুটিগুলিকে সঠিকভাবে পরিচালনা করা, যাতে অ্যাপ্লিকেশনটি ভেঙে না পড়ে এবং ব্যবহারকারীকে যথাযথ তথ্য দেওয়া যায়। Error Handling দুটি স্তরে করা যায়:

  1. Application-Level Error Handling (Global Error Handling)
  2. Service-Level Error Handling (Per-Service Error Handling)

১.১ Application-Level Error Handling

Global Error Handling করতে হলে WCF এর IErrorHandler ইন্টারফেস ব্যবহার করতে হয়, যা WCF সার্ভিসের মধ্যে ঘটিত ত্রুটিগুলি হ্যান্ডেল করতে ব্যবহৃত হয়।

IErrorHandler ইন্টারফেসের মাধ্যমে Error Handling:
  1. IErrorHandler ইন্টারফেস ইমপ্লিমেন্ট করুন।
  2. HandleError মেথড ব্যবহার করে ত্রুটির বিবরণ সংগ্রহ করুন এবং ProvideFault মেথড ব্যবহার করে ফল্ট তৈরি করুন।
public class CustomErrorHandler : IErrorHandler
{
    public bool HandleError(Exception error)
    {
        // এখানে ত্রুটির লগ বা ডিবাগিং করা যেতে পারে
        Console.WriteLine("Error: " + error.Message);
        return true; // এখানে true মানে error সঠিকভাবে হ্যান্ডেল করা হয়েছে
    }

    public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
    {
        // এখানে কাস্টম ত্রুটি বার্তা তৈরি করা যেতে পারে
        FaultException faultException = new FaultException("An error occurred during processing.");
        fault = Message.CreateMessage(version, faultException, "http://tempuri.org");
    }
}
  1. ServiceBehavior ব্যবহার করে ErrorHandler ইনজেক্ট করুন:
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class MyService : IMyService
{
    // সার্ভিসের কোড
}
  1. ErrorHandler চালু করার জন্য ServiceHost ক্লাসে হ্যান্ডলার যোগ করুন:
public class MyServiceHost : ServiceHost
{
    protected override void OnOpening()
    {
        base.OnOpening();
        this.Description.Behaviors.Add(new CustomErrorHandler());
    }
}

১.২ Service-Level Error Handling

সার্ভিস-লেভেল এও ত্রুটি হ্যান্ডলিং করা যায়। উদাহরণস্বরূপ, কিছু নির্দিষ্ট সার্ভিসের মধ্যে try-catch ব্লক ব্যবহার করা যেতে পারে, যেখানে exception হ্যান্ডেল করা হবে:

public string GetData(int value)
{
    try
    {
        // ডেটা প্রক্রিয়া করা
        return "Data for value " + value;
    }
    catch (Exception ex)
    {
        // ত্রুটি হ্যান্ডলিং
        throw new FaultException("An error occurred while processing the request.");
    }
}

২. Logging Behaviors in WCF

Logging হল সিস্টেমের কার্যকলাপ ট্র্যাক করা এবং ত্রুটি বা সমস্যা চিন্হিত করা। WCF তে লোগিং করতে সাধারণত IEndpointBehavior বা IServiceBehavior ব্যবহার করা হয়। এটি WCF সার্ভিসে বিভিন্ন ধরনের Request/Response, Faults, এবং Exceptions ট্র্যাক করতে সাহায্য করে।

২.১ Basic Logging Behaviors

WCF সার্ভিসে Message Logging এর জন্য WCF এর বিল্ট-ইন Diagnostics এবং Tracing সিস্টেম ব্যবহার করা যায়। Message Logging এবং Fault Logging সেটআপ করার জন্য System.Diagnostics এর মাধ্যমে কনফিগারেশন করা যেতে পারে।

web.config ফাইলে Logging Enable করা:
<system.diagnostics>
  <sources>
    <source name="System.ServiceModel" switchValue="Information, ActivityTracing" />
    <source name="System.ServiceModel.MessageLogging" switchValue="Information, ActivityTracing">
      <listeners>
        <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="C:\log\trace.log" />
      </listeners>
    </source>
  </sources>

  <trace autoflush="true"/>
</system.diagnostics>

<system.serviceModel>
  <diagnostics>
    <messageLogging enabled="true" maxSize="102400" maxMessages="20" logMessagesAtTransportLevel="false"/>
  </diagnostics>
</system.serviceModel>
  • enabled="true": এটি Message Logging সক্ষম করবে।
  • maxSize: লগ ফাইলের সর্বোচ্চ আকার নির্ধারণ করে।
  • logMessagesAtTransportLevel="false": এটি মেসেজের ট্রান্সপোর্ট স্তরের ডেটা লগ করা থেকে বিরত রাখবে।

২.২ Custom Logging Behavior

আপনি যদি custom logging চান, তাহলে IServiceBehavior বা IEndpointBehavior ব্যবহার করে custom logging logic প্রয়োগ করতে পারেন। এর মাধ্যমে আপনি সার্ভিসের প্রতিটি মেসেজ লগ করতে পারেন।

Custom Logging Behavior উদাহরণ:
public class CustomLoggingBehavior : IServiceBehavior
{
    public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, BindingParameterCollection bindingParameters)
    {
        // কোন অতিরিক্ত বাইনডিং প্যারামিটার যুক্ত করতে চাইলে এটি ব্যবহার করা হয়
    }

    public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
        foreach (var endpoint in serviceDescription.Endpoints)
        {
            // এখানে লোগিং অ্যাপ্লিকেশন যুক্ত করা হতে পারে
            endpoint.Dispatcher.MessageInspector = new CustomMessageInspector();
        }
    }

    public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
        // সার্ভিস কনফিগারেশন যাচাই করা
    }
}
CustomMessageInspector উদাহরণ:
public class CustomMessageInspector : IDispatchMessageInspector
{
    public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
    {
        // Incoming Request Logging
        Console.WriteLine("Received request: " + request.ToString());
        return null;
    }

    public void BeforeSendReply(ref Message reply, object correlationState)
    {
        // Outgoing Response Logging
        Console.WriteLine("Sending reply: " + reply.ToString());
    }
}

২.৩ Logging Exception

try
{
    // কিছু কাজ করা
}
catch (Exception ex)
{
    // ত্রুটি লগ করা
    File.AppendAllText("errorlog.txt", DateTime.Now + " - " + ex.Message + Environment.NewLine);
    throw new FaultException("An error occurred.");
}

সারাংশ

  • Error Handling: WCF তে ত্রুটি হ্যান্ডলিং IErrorHandler ইন্টারফেসের মাধ্যমে অথবা সাধারণ try-catch ব্লকের মাধ্যমে করা যেতে পারে। এটি সার্ভিসের মধ্যে সঠিক ত্রুটি বার্তা এবং ফল্ট ফিরিয়ে দিয়ে ক্লায়েন্টকে সহায়তা করে।
  • Logging: WCF তে লগিং করতে System.Diagnostics বা IServiceBehavior এর মাধ্যমে কাস্টম লোগিং প্রক্রিয়া ব্যবহার করা যায়। লগিং সার্ভিসের কার্যকলাপ ট্র্যাক করতে এবং সমস্যা শনাক্ত করতে সাহায্য করে।
  • Message Logging: WCF এর বিল্ট-ইন ডায়াগনস্টিকস সিস্টেম ব্যবহার করে সার্ভিসের request/response এবং faults লগ করা যেতে পারে।

এই পদ্ধতিগুলো ব্যবহার করে আপনি WCF অ্যাপ্লিকেশনের মধ্যে Error Handling এবং Logging কার্যক্রমকে আরও দক্ষ এবং কার্যকরীভাবে পরিচালনা করতে পারবেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...